from django.shortcuts import render
from rest_framework.views import APIView
import random
import redis    #使用redis也得导入redis
from django.http import JsonResponse


class Phone(APIView):
    def get(self,request):
        # 从前端获取数据用get的时候request后用query_params
        phone = request.query_params.get('phone')
        print('.....................',phone)
        # 把redis中的key构造出来用来存储短信验证码
        key ='sms_code_%s'%phone
        flag='flag_%s'%phone
        print('=======',key,flag)
        red = redis.Redis()
        # 如果获取到flag到值那么就执行下面代码
        if red.get(flag):
            # 关闭数据库
            red.close()
            # 转换数据
            return JsonResponse({'code':204,'err':'已经生成验证码'})
        else:
            # 生成短信验证码
            num = random.randint(1000,9999)
            # 60秒之内验证码不能生成
            red.set(flag,1,ex=60)
            # 生成验证码，写入数据库
            red.set(key,num,ex=300)
            return JsonResponse({'code':200,'msg':'生成验证码成功','smsCode':num})
class Yz(APIView):
    def post(self,request):
        phone = request.data.get('phone')
        sms = request.data.get('smsCode')
        # 手机号格式化输出
        key = 'sms_code_%s' % phone
        red = redis.Redis()
        # 获取一下手机号
        yzm = red.get(key)
        if yzm:
            # 解码方式
            if yzm.decode()==sms:
                red.close()
                return JsonResponse({'code':200,'msg':'验证码验证成功'})
            else:
                return JsonResponse({'code':204,'err':'验证失败'})
        else:
            return JsonResponse({'code':204,'msg':'验证码过期'})

